/**
 * 写入数据到文件
 * @param file string|buffer|int 文件路径  int:文件描述符
 * @param data string|buffer 要写入的数据  string:opt.enc
 * @param opt json|null 选项
 * 		enc: string 数据(string时)编码  utf8(默认),base64
 * 		mode: int 创建文件时权限  八进制  默认:0o644
 * 		flag: string 文件打开模式  默认w:创建,清除原有
 * 			file=int, 文件描述符时: 参数flag->无效,忽略
 * 		syn: boolean 是否同步操作  默认false:异步
 * @return Promise|null  !opt.syn->Promise
 */
$.fsWrite = function (file, data, opt=null){
	const DEF = {enc:'utf8', mode:0o644, flag:'w', syn:false};
	const $FS=require('node:fs'), ERR=e=>$.err('$.fsWrite',e);
	$.fsWrite = function(file, data, opt=null){
		opt=$.mix({},DEF,opt);  const {enc,mode,flag}=opt;
		const opx = {encoding:enc, mode, flag, flush:true};
		if(opt.syn){
			try{ $FS.writeFileSync(file, data, opx); }
			catch(err){ ERR(err); }  return null;
		}
		return $.fsAsync('writeFile', file, data, opx)
			.then(()=>null).catch(ERR);
	};
	return $.fsWrite(file, data, opt);
};
